package com.qf.demo;

/**
 * projectName: Demo1
 *
 * @author dongshihao
 * Date:2021/9/22   10:32
 * description: 单项链表
 */
public class Demo2 {

    public static void main(String[] args) {
        //创建头
        // Node<Integer> top = new Node<Integer>();
/*        一个一个赋值
         value 第一个值
        top.value = 1;
        创建第二个值
        top.next = new Node<Integer>();
        给第二个赋值
        top.next.value = 2;
        创建第三个链表
        top.next.next = new Node<Integer>();
        给第三个赋值
        top.next.next.value = 2;
        */

        //创建头
        Node<Integer> top = new Node<Integer>();
        //循环方式赋值
        Node<Integer> p = top;
        for (int i = 1; i < 10; i++) {
            //p是第几个位置
            p.value = i;
            if (i != 9){

                p.next = new Node<>();

                p = p.next;
            }
        }


    /*
       Node<Integer> top = new Node<Integer>();
        Node p = top;
        for (int i = 1; i < 10; i++) {
            p.value = i;
            if (i != 9) {
                p.next = new Node();
                p= p.next;
            }
        }
        */


    }


    /**
     * 定义单项链表
     *
     * @param <T>
     */
    static class Node<T> {
        T value;
        Node<T> next;
    }


    /**
     * 判断是否有环
     *
     * @param top
     * @return
     */
    public static boolean b(Node<Integer> top) {
        Node p1 = top;
        Node p2 = top;

        //循环
        for (; ; ) {
            //健壮性吧
            if (p2 == null || p2.next == null) {
                return false;
            }
            //慢指针走一步
            p1 = p1.next;
            //快指针走两步
            p2 = p2.next.next;
            //判断是否有环
            if (p1 == p2) {
                return true;
            }
        }

    }
}
